/*
 * Código-Fonte escrito com base no livro Projeto de Algoritmos, do autor
 * Nivio Ziviani
 */
package cap7;

import java.io.*;
import cap7.listaadj.arranjo.Grafo; // vide Programa 7.4

public class TestaGrafo {
    static BufferedReader in = new BufferedReader( new InputStreamReader( System.in ) );
    
    public static Grafo.Aresta lerAresta() throws Exception {
        System.out.println( "Aresta:" );
        System.out.print("  V1:");
        
        int v1 = Integer.parseInt( in.readLine() );
        
        System.out.print( "  V2:" );
        
        int v2 = Integer.parseInt( in.readLine() );
        
        System.out.print( "  Peso:" );
        
        int peso = Integer.parseInt( in.readLine() );
        
        return new Grafo.Aresta( v1, v2, peso );
    }
    
    public static void main( String[] args ) throws Exception {
        System.out.print( "No. vértices:" );
        
        int nVertices = Integer.parseInt( in.readLine() );
        
        System.out.print( "No. arestas:" );
        
        int nArestas = Integer.parseInt( in.readLine() );
        
        Grafo grafo = new Grafo( nVertices, nArestas );
        
        for( int i = 0; i < nArestas; i++ ) {
            Grafo.Aresta a = lerAresta();
            
            // Duas chamadas porque o grafo é não direcionado
            grafo.insereAresta( a.v1(), a.v2(), a.peso() );
            grafo.insereAresta( a.v2(), a.v1(), a.peso() );
        }
        
        grafo.imprime();
        
        in.readLine();
        
        System.out.print( "Lista adjacentes de: " );
        
        int v1 = Integer.parseInt( in.readLine() );
        
        if( !grafo.listaAdjVazia( v1 ) ) {
            Grafo.Aresta adj = grafo.primeiroListaAdj( v1 );
            
            while( adj != null ) {
                System.out.println( "  " + adj.v2() + " (" + adj.peso() + ") " );
                adj = grafo.proxAdj( v1 );
            }
            
            System.out.println();
            
            in.readLine();
        }
        
        System.out.print( "Retira aresta: " );
        
        Grafo.Aresta a = lerAresta();
        
        if( grafo.existeAresta( a.v1(), a.v2() ) ) {
            // Duas chamadas porque o grafo é não direcionado
            grafo.retiraAresta( a.v1(), a.v2() );
            grafo.retiraAresta( a.v2(), a.v1() );
        }
        else {
            System.out.println( "Aresta não existe" );
        }
        
        grafo.imprime();
        
        in.readLine();
        
        System.out.print( "Existe aresta: " );
        
        a = lerAresta();
        
        if( grafo.existeAresta( a.v1(), a.v2() ) ) {
            System.out.println( "  Sim" );
        }
        else {
            System.out.println( "  Não" );
        }
    }
}
